package com.job.moudle1;

import java.time.Duration;
import java.time.Instant;
import java.util.Scanner;

public class task2 {

    public static void main(String[] args) {
        System.out.println("**************************************************************************************");
        System.out.println("       编程题：编程找出1000以内的所有完数并打印出来。                                    ");
        System.out.println("**************************************************************************************");
        System.out.println("解题思路：通过双重循环，计算每个数的因子数的和来判断是否为完全数。");
        System.out.println("**************************************************************************************");

        int maxNum;
        int sum;
        int count = 0;
        Scanner sc = new Scanner(System.in);
        do{
            System.out.print("请输入需要查找的最大范围数（正整数）：");
            if (sc.hasNextInt()) {//has判断输入正整数
                maxNum = sc.nextInt();
                if(maxNum < 1){
                    System.out.print("输入的范围不能小于1，您输入的数字为");
                    System.out.println(maxNum);
                    continue;
                }
                break;
            } else {
                System.out.print("输入的数字不正确");
                System.out.println(sc.next());
            }
        }while (true);

        Instant start = Instant.now();

        for(int i = 2; i <= maxNum; i++){
            sum = 0; // 每次重置因子数和的结果为0
            for(int j = 1; j < i; j++){
                if(i % j == 0)sum += j;
            }
            if(sum == i){
                System.out.println("这是一个完全数：" + i);
                count++;
            }
        }
        Instant finish = Instant.now();
        long timeElapsed = Duration.between(start, finish).toMillis();
        System.out.println("在数字" + maxNum + "范围内，一共找到" + count + "个完全数，总共耗时：" + timeElapsed + "ms;");

        System.out.println("**********************************************");
        System.out.println("            恭喜南哥成功完成一题                ");
        System.out.println("**********************************************");
    }
}
